10.6 视觉定位

本节内容为理论知识,不是单独的玩法,是课程[7.颜色分拣与堆叠]和课程[8.垃圾分拣]学习前的准备及理论知识。

1.方框标定

标定的目的使物体中心在视野下的位置转换成实际距离机械臂基坐标的位置。

image-20240509183450030

(1)启动完所有代码块后,在代码的最下方显示界面,点击【calibration_model】按钮,进入标定模式后,才可以滑动滑动条进行调节。

(2)调节滑动条,使得方框完全出现在视野中,并完整的检测出方框的边缘。滑动条【joint1】控制 1 号舵机左右调整,滑动条【joint2】控制 2 号舵机上下调整,滑动条【threshold】是图像边缘二值化检测阈值的调整。注意 : 必须将方框四边清晰识别出来,且无外界干扰才可以。

(3)点击【calibration_ok】按钮,完成标定。同时会将本次调整的参数写入配置文件中,下次启动时,如无意外就无需调整,直接点击标定和确定即可。

(4)此时,标定结束,如下图所示。如果标定过程中,出现错误。点击【calibration_cancel】按钮取消标定结果,然后重新标定。

image-20240509183537493

图像处理,提取轮廓点

绘制轮廓,返回轮廓的边点

透视变换,将检测的轮廓透视变换为(640,480)图像

详细代码库见

dofbot_ws/src/dofbot_color_identify/scripts/dofbot_config.py

或者

dofbot_ws/src/dofbot_color_stacking/scripts/dofbot_config.py

或者

dofbot_ws/src/dofbot_garbage_yolov5/dofbot_config.py

2.定位计算

相机在机械臂上看到地面的视野最广的情况是斜视 45°,此时视野下的方框呈像类似梯形,经透视变换将方框的四边透视为图像的四边。

那么视野下物体中心点距图像(640,480)的中心距离和实际物体中心距方框(160,160)中心的距离就是一个比例关系。

获取物体在基坐标系下的定位后,逆运动学求出机械臂在规定的姿态各个关节到需要转动的角度。

由于机械臂关节的运动范围为 0°~180°,负的角度值无法到达,当逆解越界,出现负值时,适当调节。

3. 夹爪计算

image-20240509184259611

由于常根据不同的使用场景使用不同的末端执行器,一般来说,运动学逆解求得是机械臂末端的位姿,并不是末端执行器(夹爪,吸盘等)的末端。

底盘坐标系我们称之为基坐标系,夹爪处的红绿蓝坐标系我们称之为末端坐标系,夹爪称之为末端执行器。现在,运动学逆解求得是末端坐标系(不是夹爪夹取的位置)到达的位置,对于如图所示机械臂,我们在求逆解之前,需要获取的是末端坐标系到达的位置信息(即末端坐标系的位姿信息),那么如何求解那?

对于姿态,我们设置绕轴顺时针旋转(逆正顺负)如下:

image-20240509184424845

atan2()反正切函数,atan() 的增强版,能确定象限 double

atan2(double y,double x);

atan2() 函数的功能是求 y/x 的反正切值,atan2() 是 atan() 的增强版,能够确定角度所在的象限。反正切函数 atan2() 和正切函数 tan() 的功能恰好相反:

tan()是已知一个角的弧度值,求该角的正切值;而 atan2() 是已知一个角的正切值(也就是 y/x),求该角的弧度值。

image-20240509184508120

测量夹爪的长度,tool_param=0.12;单位是米。

我们要求的是末端坐标系在基坐标系下的 z 坐标,请看左上图三角形,利用三角函数求的竖直直角边高度。

详细代码库 dofbot_ws/src/dofbot_info/src/dofbot_server.cpp